コンピュータをゼロから作る『コンピュータシステムの理論と実装』の第2版が発売されました #nand2tetris
プログラムがどのように実行されるのか、気になったことはありませんか?
そんな好奇心旺盛なエンジニアにぴったりなのが 『コンピュータシステムの理論と実装(通称Nand2Tetris本)』 です。
- https://www.amazon.co.jp/dp/481440087X/
- コンピュータシステムの理論と実装 第2版 ―モダンなコンピュータの作り方
- 出版社 : オライリー・ジャパン
- 発売日 : 2024/12/2
この本では、NANDゲートから始めて、CPU、アセンブラ、仮想マシン、コンパイラなど、ハードウェアからソフトウェアまでコンピュータをゼロから作りながら学べます。
本書の第2版の翻訳にあたり、レビュアーとして参加したので、本書の魅力を紹介します。
『コンピュータシステムの理論と実装』について
コンピュータを理解するにはフルスクラッチで理解するのが一番という考えのもと『コンピュータシステムの理論と実装』は出版されています。
本書は前半のハードウェア編と後半のソフトウェア編があり、各章のプロジェクト(課題)を具体的に実装しながら、コンピュータのビルディングブロックをインクリメンタルに学びます。
次の目次を見ると、ボトムアップに学ぶ実際の流れがわかるでしょう。
第I部 ハードウェア
1章 ブール論理
2章 ブール算術
3章 メモリ
4章 機械語
5章 コンピュータアーキテクチャ
6章 アセンブラ
第II部 ソフトウェア
7章 仮想マシンI:処理
8章 仮想マシンII:制御
9章 高水準言語
10章 コンパイラI:構文解析
11章 コンパイラII:コード生成
12章 OS
13章 さらなる冒険へ
各章(プロジェクト)の依存関係をコンピュータアーキテクチャ風に見立てたのが次の図です(第1部の導入にも同じ図があります)
※ 出典 https://doi.org/10.1145/3626513
前半ではNANDゲートを出発点にHackという独自の16bitハードウェアを構築し、後半ではこのハードウェア上でJava風のJack言語で書かれたグラフィックアプリケーション(pong)を動かす、欲張りな一冊です。
そのため、この本は "nand2tetris(Nand to Tetris)" とも呼ばれます(Tetris=GUIアプリ)。
本書(原題 "The Elements of Computing Systems" )は2005年にイスラエルの2人の教授(Noam Nisan & Shimon Schocken)によって執筆され、MOOCのCourseraで最も人気のコースの一つとなるなど、非常に好意的に受けいれられました。
一般的な教科書とは体裁が大きく異なるにも関わらず、世界中の教育機関でも教科書として採用されてきたことも興味深いです。
2015年には 『ゼロから作るDeep Learning』シリーズ でもおなじみ斎藤 康毅さんによって日本語に翻訳されました。
2021年に発売された 第2版 では、前半(ハードウェア)と後半(ソフトウェア)のコントラストが明確になり、付録も補強され、多くのフィードバックを元に文章も全面的に書き換えられました。
プロジェクトについて
本書の醍醐味は、各章に付随するプロジェクトの実装を通して理解を深める体験学習にあります。
通読が狙いではないため、各章はプロジェクトの実装を含めて、1~2週間かかることが想定されています。
時間は気にせず、面倒くさがらず、GitHub Copilotに頼らず、できる限り自力で頑張りましょう。
たくさんの先人がプロジェクトをGitHubで共有しているため、ハマったときは参考にするとよいでしょう。
以前はJavaアプリケーションとしてハードウェアシミュレーター等を動かす必要がありましたが、現在はウェブインターフェースのIDEが存在し、プロジェクトの遂行に必要な諸々の操作がブラウザで完結するようになり、実験の敷居が下がっています。
最後に
コンピュータをゼロから作って実践的に学ぶ『コンピュータシステムの理論と実装』の日本語第2版が2024年12月に出版されました。
コンピュータサイエンスの正式な教育を受けてこなかったようなエンジニアが、普段の業務から少し離れた(低い)レイヤーにお近づきになるための一歩として、一番マッチすると思います。
本書は広範なテーマについて実践を重視して一冊に詰め込んでいるため、CPUやコンパイラなど、気になったテーマについては網羅的に書かれた書籍も併読することをおすすめします。
個人的には、レビュアーに参加することで、長年の積読状態だった原書を解消することができたのが何よりも嬉しいです。とはいえ、レビュー期間の制約もあって、斜め読みで終わってしまっています。本書の醍醐味はプロジェクトにあると思うので、時間を見つけてプロジェクトを完遂させたいと思います。
参考
- https://www.nand2tetris.org/
- https://www.oreilly.co.jp/books/9784814400874/
- https://www.ohmsha.co.jp/book/9784814400874/
- https://www.amazon.co.jp/dp/481440087X/
- Web IDE https://nand2tetris.github.io/web-ide/
- https://www.coursera.org/learn/build-a-computer
- Nand to Tetris: Building a Modern Computer System from First Principles | Communications of the ACM